package com.baturu.vin.benz.dto;

import com.baturu.vin.base.dto.BasePartsInfoDTO;
import com.baturu.vin.dto.EPCPartsImagePositionDTO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * 奔驰EPC配件信息
 * @author liangguanglong
 * @Date 16/7/13
 * @Time 上午10:46
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BenzEPCPartsInfoDTO extends BasePartsInfoDTO{

    /**
     * 色彩描述
     */
    private String colorRemark;

    private int id;

    /**
     * 主名(为了防止通过替换编码导进的映射关系被删除)
     */
    private String btrPartsName;

    /**
     * 配件编码
     */
    private String partNum;

    /**
     * 配件类型(即配件编码前缀)
     */
    private String partsType;

    /**
     * 配件所在类别编号(由vin对应的车型决定)
     */
    private String catNum;

    /**
     * 配件所属组别 (奔驰车结构分很多个组,每组下有很多配件)
     */
    private String groupNum;

    /**
     * 所属子组
     */
    private String subGroup;

    /**
     * 主名对应的索引 (对应原表nounidx字段)
     */
    private String partsNameIdx;

    /**
     * 主名名称
     */
    private String partsName;

    /**
     * 配件描述的附加信息的索引
     */
    private String descIdx;

    /**
     * 附件信息名称
     */
    private String descName;

    /**
     * SA代码  (对应 原表字段 codeB)
     */
    private String saCode;

    /**
     * 脚注,用于获取颜色代码和其关联SA
     */
    private String footnotes;

    /**
     * 替换编码标识,有值代表 是替换编码,为空代表是 主编码
     */
    private String replFlag;

    /**
     * 发动机前三位的组合
     */
    private String type;

    /**
     * 发动机后三位的组合
     */
    private String submods;

    /**
     * 生产起始日期
     */
    private Date beginProductTime;

    /**
     * 生产结束日期(为空代表至今)
     */
    private Date endProductTime;

    /**
     * 转向
     */
    private String steering;

    /**
     * 将字符串拆分得到的脚注
     */
    private List<String> footNoteList;

    /**
     * 符合的sa代码段
     */
    private String matchSaCode;

    /**
     * 适用起始底盘
     */
    private List<String> beginFitChassList;

    /**
     * 适用截止底盘
     */
    private List<String> endFitChassList;

    /**
     * 适用但不包括的底盘
     */
    private List<String> fitNotContainChassList;

    /**
     * 不符合年限的Sa
     */
    private String noFitSa;

    /**
     * 配件图片名称
     */
    private String imgName;

    /**
     * 配件图片路径
     */
    private String imgPath;

    /**
     * 图片位置坐标
     */
    List<EPCPartsImagePositionDTO> positon;

    /**
     * subgrp名称
     */
    private String epcName;

    /**
     * 色码
     */
    private String es2Code;

    private String seqnum;

    private String seqno;

    private String callout;

    private String indent;

    private String tuvsign;

    private String optflag;

    private String reptype;

    private String reppno;

    private String neutral;

    private String quantbm;

    private String components;

    private String reppart;

    private String posAddr;

    private int codeBScore;

    private boolean hideReplacedByPart;

    private ArrayList repPartSeqNum;

    private boolean replacementPart;

    private boolean accessoryPart;

    private String cbPartsCode;

    private String optPart;

    /**
     * 同一张图上的所有位置号
     */
    private Set<String> imageCallout;

    private String imageCode;

    public void addRepPartSeqNum(String repPartSeqNum){
        if(this.repPartSeqNum == null){
            this.repPartSeqNum = new ArrayList();
        }
        String[] split;
        String[] seqNums = split = repPartSeqNum.split(" ");
        for(String s: split){
            if(!this.repPartSeqNum.contains(s)){
                this.repPartSeqNum.add(s);
            }
        }
    }

    public String getEpcPartsName() {
        if(StringUtils.isBlank(this.partsName)) {
            return StringUtils.EMPTY;
        }
        if(StringUtils.isBlank(this.descName)) {
            return this.partsName;
        }
        return this.partsName + "(" + this.descName + ")";
    }

    @Override
    public String getPartsCode() {
        return this.partsType.trim()+this.partNum.trim();
    }
}
